home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Resources / Chat & Communication / Digsby build 37 / digsby_setup.exe / lib / locale.pyo (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2008-10-13  |  38.0 KB  |  1,389 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.5)
  3.  
  4. import sys
  5. import encodings
  6. import encodings.aliases as encodings
  7. __all__ = [
  8.     'getlocale',
  9.     'getdefaultlocale',
  10.     'getpreferredencoding',
  11.     'Error',
  12.     'setlocale',
  13.     'resetlocale',
  14.     'localeconv',
  15.     'strcoll',
  16.     'strxfrm',
  17.     'str',
  18.     'atof',
  19.     'atoi',
  20.     'format',
  21.     'format_string',
  22.     'currency',
  23.     'normalize',
  24.     'LC_CTYPE',
  25.     'LC_COLLATE',
  26.     'LC_TIME',
  27.     'LC_MONETARY',
  28.     'LC_NUMERIC',
  29.     'LC_ALL',
  30.     'CHAR_MAX']
  31.  
  32. try:
  33.     from _locale import *
  34. except ImportError:
  35.     CHAR_MAX = 127
  36.     LC_ALL = 6
  37.     LC_COLLATE = 3
  38.     LC_CTYPE = 0
  39.     LC_MESSAGES = 5
  40.     LC_MONETARY = 4
  41.     LC_NUMERIC = 1
  42.     LC_TIME = 2
  43.     Error = ValueError
  44.     
  45.     def localeconv():
  46.         return {
  47.             'grouping': [
  48.                 127],
  49.             'currency_symbol': '',
  50.             'n_sign_posn': 127,
  51.             'p_cs_precedes': 127,
  52.             'n_cs_precedes': 127,
  53.             'mon_grouping': [],
  54.             'n_sep_by_space': 127,
  55.             'decimal_point': '.',
  56.             'negative_sign': '',
  57.             'positive_sign': '',
  58.             'p_sep_by_space': 127,
  59.             'int_curr_symbol': '',
  60.             'p_sign_posn': 127,
  61.             'thousands_sep': '',
  62.             'mon_thousands_sep': '',
  63.             'frac_digits': 127,
  64.             'mon_decimal_point': '',
  65.             'int_frac_digits': 127 }
  66.  
  67.     
  68.     def setlocale(category, value = None):
  69.         if value not in (None, '', 'C'):
  70.             raise Error, '_locale emulation only supports "C" locale'
  71.         
  72.         return 'C'
  73.  
  74.     
  75.     def strcoll(a, b):
  76.         return cmp(a, b)
  77.  
  78.     
  79.     def strxfrm(s):
  80.         return s
  81.  
  82.  
  83.  
  84. def _group(s, monetary = False):
  85.     conv = localeconv()
  86.     if not monetary or 'mon_thousands_sep':
  87.         pass
  88.     thousands_sep = conv['thousands_sep']
  89.     if not monetary or 'mon_grouping':
  90.         pass
  91.     grouping = conv['grouping']
  92.     if not grouping:
  93.         return (s, 0)
  94.     
  95.     result = ''
  96.     seps = 0
  97.     spaces = ''
  98.     if s[-1] == ' ':
  99.         sp = s.find(' ')
  100.         spaces = s[sp:]
  101.         s = s[:sp]
  102.     
  103.     while s and grouping:
  104.         if grouping[0] == CHAR_MAX:
  105.             break
  106.         elif grouping[0] != 0:
  107.             group = grouping[0]
  108.             grouping = grouping[1:]
  109.         
  110.         if result:
  111.             result = s[-group:] + thousands_sep + result
  112.             seps += 1
  113.         else:
  114.             result = s[-group:]
  115.         s = s[:-group]
  116.         if s and s[-1] not in '0123456789':
  117.             return (s + result + spaces, seps)
  118.             continue
  119.     if not result:
  120.         return (s + spaces, seps)
  121.     
  122.     if s:
  123.         result = s + thousands_sep + result
  124.         seps += 1
  125.     
  126.     return (result + spaces, seps)
  127.  
  128.  
  129. def format(percent, value, grouping = False, monetary = False, *additional):
  130.     if percent[0] != '%':
  131.         raise ValueError('format() must be given exactly one %char format specifier')
  132.     
  133.     if additional:
  134.         formatted = percent % ((value,) + additional)
  135.     else:
  136.         formatted = percent % value
  137.     if percent[-1] in 'eEfFgG':
  138.         seps = 0
  139.         parts = formatted.split('.')
  140.         if grouping:
  141.             (parts[0], seps) = _group(parts[0], monetary = monetary)
  142.         
  143.         if not monetary or 'mon_decimal_point':
  144.             pass
  145.         decimal_point = localeconv()['decimal_point']
  146.         formatted = decimal_point.join(parts)
  147.         while seps:
  148.             sp = formatted.find(' ')
  149.             if sp == -1:
  150.                 break
  151.             
  152.             formatted = formatted[:sp] + formatted[sp + 1:]
  153.             seps -= 1
  154.     elif percent[-1] in 'diu':
  155.         if grouping:
  156.             formatted = _group(formatted, monetary = monetary)[0]
  157.         
  158.     
  159.     return formatted
  160.  
  161. import re
  162. import operator
  163. _percent_re = re.compile('%(?:\\((?P<key>.*?)\\))?(?P<modifiers>[-#0-9 +*.hlL]*?)[eEfFgGdiouxXcrs%]')
  164.  
  165. def format_string(f, val, grouping = False):
  166.     percents = list(_percent_re.finditer(f))
  167.     new_f = _percent_re.sub('%s', f)
  168.     if isinstance(val, tuple):
  169.         new_val = list(val)
  170.         i = 0
  171.         for perc in percents:
  172.             starcount = perc.group('modifiers').count('*')
  173.             new_val[i] = format(perc.group(), new_val[i], grouping, False, *new_val[i + 1:i + 1 + starcount])
  174.             del new_val[i + 1:i + 1 + starcount]
  175.             i += 1 + starcount
  176.         
  177.         val = tuple(new_val)
  178.     elif operator.isMappingType(val):
  179.         for perc in percents:
  180.             key = perc.group('key')
  181.             val[key] = format(perc.group(), val[key], grouping)
  182.         
  183.     else:
  184.         val = format(percents[0].group(), val, grouping)
  185.     return new_f % val
  186.  
  187.  
  188. def currency(val, symbol = True, grouping = False, international = False):
  189.     conv = localeconv()
  190.     if not international or 'int_frac_digits':
  191.         pass
  192.     digits = conv['frac_digits']
  193.     if digits == 127:
  194.         raise ValueError("Currency formatting is not possible using the 'C' locale.")
  195.     
  196.     s = format('%%.%if' % digits, abs(val), grouping, monetary = True)
  197.     s = '<' + s + '>'
  198.     if symbol:
  199.         if not international or 'int_curr_symbol':
  200.             pass
  201.         smb = conv['currency_symbol']
  202.         if not val < 0 or 'n_cs_precedes':
  203.             pass
  204.         precedes = conv['p_cs_precedes']
  205.         if not val < 0 or 'n_sep_by_space':
  206.             pass
  207.         separated = conv['p_sep_by_space']
  208.         if precedes:
  209.             if not separated or ' ':
  210.                 pass
  211.             s = smb + '' + s
  212.         elif not separated or ' ':
  213.             pass
  214.         s = s + '' + smb
  215.     
  216.     if not val < 0 or 'n_sign_posn':
  217.         pass
  218.     sign_pos = conv['p_sign_posn']
  219.     if not val < 0 or 'negative_sign':
  220.         pass
  221.     sign = conv['positive_sign']
  222.     if sign_pos == 0:
  223.         s = '(' + s + ')'
  224.     elif sign_pos == 1:
  225.         s = sign + s
  226.     elif sign_pos == 2:
  227.         s = s + sign
  228.     elif sign_pos == 3:
  229.         s = s.replace('<', sign)
  230.     elif sign_pos == 4:
  231.         s = s.replace('>', sign)
  232.     else:
  233.         s = sign + s
  234.     return s.replace('<', '').replace('>', '')
  235.  
  236.  
  237. def str(val):
  238.     return format('%.12g', val)
  239.  
  240.  
  241. def atof(string, func = float):
  242.     ts = localeconv()['thousands_sep']
  243.     if ts:
  244.         string = string.replace(ts, '')
  245.     
  246.     dd = localeconv()['decimal_point']
  247.     if dd:
  248.         string = string.replace(dd, '.')
  249.     
  250.     return func(string)
  251.  
  252.  
  253. def atoi(str):
  254.     return atof(str, int)
  255.  
  256.  
  257. def _test():
  258.     setlocale(LC_ALL, '')
  259.     s1 = format('%d', 123456789, 1)
  260.     print s1, 'is', atoi(s1)
  261.     s1 = str(3.14)
  262.     print s1, 'is', atof(s1)
  263.  
  264. _setlocale = setlocale
  265.  
  266. def normalize(localename):
  267.     fullname = localename.lower()
  268.     if ':' in fullname:
  269.         fullname = fullname.replace(':', '.')
  270.     
  271.     if '.' in fullname:
  272.         (langname, encoding) = fullname.split('.')[:2]
  273.         fullname = langname + '.' + encoding
  274.     else:
  275.         langname = fullname
  276.         encoding = ''
  277.     norm_encoding = encoding.replace('-', '')
  278.     norm_encoding = norm_encoding.replace('_', '')
  279.     lookup_name = langname + '.' + encoding
  280.     code = locale_alias.get(lookup_name, None)
  281.     if code is not None:
  282.         return code
  283.     
  284.     code = locale_alias.get(langname, None)
  285.     if code is not None:
  286.         if '.' in code:
  287.             (langname, defenc) = code.split('.')
  288.         else:
  289.             langname = code
  290.             defenc = ''
  291.         if encoding:
  292.             norm_encoding = encodings.normalize_encoding(encoding)
  293.             norm_encoding = encodings.aliases.aliases.get(norm_encoding, norm_encoding)
  294.             encoding = locale_encoding_alias.get(norm_encoding, norm_encoding)
  295.         else:
  296.             encoding = defenc
  297.         if encoding:
  298.             return langname + '.' + encoding
  299.         else:
  300.             return langname
  301.     else:
  302.         return localename
  303.  
  304.  
  305. def _parse_localename(localename):
  306.     code = normalize(localename)
  307.     if '@' in code:
  308.         (code, modifier) = code.split('@')
  309.         if modifier == 'euro' and '.' not in code:
  310.             return (code, 'iso-8859-15')
  311.         
  312.     
  313.     if '.' in code:
  314.         return tuple(code.split('.')[:2])
  315.     elif code == 'C':
  316.         return (None, None)
  317.     
  318.     raise ValueError, 'unknown locale: %s' % localename
  319.  
  320.  
  321. def _build_localename(localetuple):
  322.     (language, encoding) = localetuple
  323.     if language is None:
  324.         language = 'C'
  325.     
  326.     if encoding is None:
  327.         return language
  328.     else:
  329.         return language + '.' + encoding
  330.  
  331.  
  332. def getdefaultlocale(envvars = ('LC_ALL', 'LC_CTYPE', 'LANG', 'LANGUAGE')):
  333.     
  334.     try:
  335.         import _locale
  336.         (code, encoding) = _locale._getdefaultlocale()
  337.     except (ImportError, AttributeError):
  338.         pass
  339.  
  340.     if sys.platform == 'win32' and code and code[:2] == '0x':
  341.         code = windows_locale.get(int(code, 0))
  342.     
  343.     return (code, encoding)
  344.     import os
  345.     lookup = os.environ.get
  346.     for variable in envvars:
  347.         localename = lookup(variable, None)
  348.         if localename:
  349.             if variable == 'LANGUAGE':
  350.                 localename = localename.split(':')[0]
  351.             
  352.             break
  353.             continue
  354.     else:
  355.         localename = 'C'
  356.     return _parse_localename(localename)
  357.  
  358.  
  359. def getlocale(category = LC_CTYPE):
  360.     localename = _setlocale(category)
  361.     if category == LC_ALL and ';' in localename:
  362.         raise TypeError, 'category LC_ALL is not supported'
  363.     
  364.     return _parse_localename(localename)
  365.  
  366.  
  367. def setlocale(category, locale = None):
  368.     if locale and type(locale) is not type(''):
  369.         locale = normalize(_build_localename(locale))
  370.     
  371.     return _setlocale(category, locale)
  372.  
  373.  
  374. def resetlocale(category = LC_ALL):
  375.     _setlocale(category, _build_localename(getdefaultlocale()))
  376.  
  377. if sys.platform in ('win32', 'darwin', 'mac'):
  378.     
  379.     def getpreferredencoding(do_setlocale = True):
  380.         import _locale
  381.         return _locale._getdefaultlocale()[1]
  382.  
  383. else:
  384.     
  385.     try:
  386.         CODESET
  387.     except NameError:
  388.         
  389.         def getpreferredencoding(do_setlocale = True):
  390.             return getdefaultlocale()[1]
  391.  
  392.  
  393.     
  394.     def getpreferredencoding(do_setlocale = True):
  395.         if do_setlocale:
  396.             oldloc = setlocale(LC_CTYPE)
  397.             setlocale(LC_CTYPE, '')
  398.             result = nl_langinfo(CODESET)
  399.             setlocale(LC_CTYPE, oldloc)
  400.             return result
  401.         else:
  402.             return nl_langinfo(CODESET)
  403.  
  404. locale_encoding_alias = {
  405.     '437': 'C',
  406.     'c': 'C',
  407.     'en': 'ISO8859-1',
  408.     'jis': 'JIS7',
  409.     'jis7': 'JIS7',
  410.     'ajec': 'eucJP',
  411.     'ascii': 'ISO8859-1',
  412.     'latin_1': 'ISO8859-1',
  413.     'iso8859_1': 'ISO8859-1',
  414.     'iso8859_10': 'ISO8859-10',
  415.     'iso8859_11': 'ISO8859-11',
  416.     'iso8859_13': 'ISO8859-13',
  417.     'iso8859_14': 'ISO8859-14',
  418.     'iso8859_15': 'ISO8859-15',
  419.     'iso8859_2': 'ISO8859-2',
  420.     'iso8859_3': 'ISO8859-3',
  421.     'iso8859_4': 'ISO8859-4',
  422.     'iso8859_5': 'ISO8859-5',
  423.     'iso8859_6': 'ISO8859-6',
  424.     'iso8859_7': 'ISO8859-7',
  425.     'iso8859_8': 'ISO8859-8',
  426.     'iso8859_9': 'ISO8859-9',
  427.     'iso2022_jp': 'JIS7',
  428.     'shift_jis': 'SJIS',
  429.     'tactis': 'TACTIS',
  430.     'euc_jp': 'eucJP',
  431.     'euc_kr': 'eucKR',
  432.     'utf_8': 'UTF8',
  433.     'koi8_r': 'KOI8-R',
  434.     'koi8_u': 'KOI8-U' }
  435. locale_alias = {
  436.     'a3': 'a3_AZ.KOI8-C',
  437.     'a3_az': 'a3_AZ.KOI8-C',
  438.     'a3_az.koi8c': 'a3_AZ.KOI8-C',
  439.     'af': 'af_ZA.ISO8859-1',
  440.     'af_za': 'af_ZA.ISO8859-1',
  441.     'af_za.iso88591': 'af_ZA.ISO8859-1',
  442.     'am': 'am_ET.UTF-8',
  443.     'american': 'en_US.ISO8859-1',
  444.     'american.iso88591': 'en_US.ISO8859-1',
  445.     'ar': 'ar_AA.ISO8859-6',
  446.     'ar_aa': 'ar_AA.ISO8859-6',
  447.     'ar_aa.iso88596': 'ar_AA.ISO8859-6',
  448.     'ar_ae': 'ar_AE.ISO8859-6',
  449.     'ar_bh': 'ar_BH.ISO8859-6',
  450.     'ar_dz': 'ar_DZ.ISO8859-6',
  451.     'ar_eg': 'ar_EG.ISO8859-6',
  452.     'ar_eg.iso88596': 'ar_EG.ISO8859-6',
  453.     'ar_iq': 'ar_IQ.ISO8859-6',
  454.     'ar_jo': 'ar_JO.ISO8859-6',
  455.     'ar_kw': 'ar_KW.ISO8859-6',
  456.     'ar_lb': 'ar_LB.ISO8859-6',
  457.     'ar_ly': 'ar_LY.ISO8859-6',
  458.     'ar_ma': 'ar_MA.ISO8859-6',
  459.     'ar_om': 'ar_OM.ISO8859-6',
  460.     'ar_qa': 'ar_QA.ISO8859-6',
  461.     'ar_sa': 'ar_SA.ISO8859-6',
  462.     'ar_sa.iso88596': 'ar_SA.ISO8859-6',
  463.     'ar_sd': 'ar_SD.ISO8859-6',
  464.     'ar_sy': 'ar_SY.ISO8859-6',
  465.     'ar_tn': 'ar_TN.ISO8859-6',
  466.     'ar_ye': 'ar_YE.ISO8859-6',
  467.     'arabic': 'ar_AA.ISO8859-6',
  468.     'arabic.iso88596': 'ar_AA.ISO8859-6',
  469.     'az': 'az_AZ.ISO8859-9E',
  470.     'az_az': 'az_AZ.ISO8859-9E',
  471.     'az_az.iso88599e': 'az_AZ.ISO8859-9E',
  472.     'be': 'be_BY.CP1251',
  473.     'be_by': 'be_BY.CP1251',
  474.     'be_by.cp1251': 'be_BY.CP1251',
  475.     'be_by.microsoftcp1251': 'be_BY.CP1251',
  476.     'bg': 'bg_BG.CP1251',
  477.     'bg_bg': 'bg_BG.CP1251',
  478.     'bg_bg.cp1251': 'bg_BG.CP1251',
  479.     'bg_bg.iso88595': 'bg_BG.ISO8859-5',
  480.     'bg_bg.koi8r': 'bg_BG.KOI8-R',
  481.     'bg_bg.microsoftcp1251': 'bg_BG.CP1251',
  482.     'bokmal': 'nb_NO.ISO8859-1',
  483.     'bokm\xe5l': 'nb_NO.ISO8859-1',
  484.     'br': 'br_FR.ISO8859-1',
  485.     'br_fr': 'br_FR.ISO8859-1',
  486.     'br_fr.iso88591': 'br_FR.ISO8859-1',
  487.     'br_fr.iso885914': 'br_FR.ISO8859-14',
  488.     'br_fr.iso885915': 'br_FR.ISO8859-15',
  489.     'br_fr@euro': 'br_FR.ISO8859-15',
  490.     'bulgarian': 'bg_BG.CP1251',
  491.     'c': 'C',
  492.     'c-french': 'fr_CA.ISO8859-1',
  493.     'c-french.iso88591': 'fr_CA.ISO8859-1',
  494.     'c.en': 'C',
  495.     'c.iso88591': 'en_US.ISO8859-1',
  496.     'c_c': 'C',
  497.     'c_c.c': 'C',
  498.     'ca': 'ca_ES.ISO8859-1',
  499.     'ca_es': 'ca_ES.ISO8859-1',
  500.     'ca_es.iso88591': 'ca_ES.ISO8859-1',
  501.     'ca_es.iso885915': 'ca_ES.ISO8859-15',
  502.     'ca_es@euro': 'ca_ES.ISO8859-15',
  503.     'catalan': 'ca_ES.ISO8859-1',
  504.     'cextend': 'en_US.ISO8859-1',
  505.     'cextend.en': 'en_US.ISO8859-1',
  506.     'chinese-s': 'zh_CN.eucCN',
  507.     'chinese-t': 'zh_TW.eucTW',
  508.     'croatian': 'hr_HR.ISO8859-2',
  509.     'cs': 'cs_CZ.ISO8859-2',
  510.     'cs_cs': 'cs_CZ.ISO8859-2',
  511.     'cs_cs.iso88592': 'cs_CZ.ISO8859-2',
  512.     'cs_cz': 'cs_CZ.ISO8859-2',
  513.     'cs_cz.iso88592': 'cs_CZ.ISO8859-2',
  514.     'cy': 'cy_GB.ISO8859-1',
  515.     'cy_gb': 'cy_GB.ISO8859-1',
  516.     'cy_gb.iso88591': 'cy_GB.ISO8859-1',
  517.     'cy_gb.iso885914': 'cy_GB.ISO8859-14',
  518.     'cy_gb.iso885915': 'cy_GB.ISO8859-15',
  519.     'cy_gb@euro': 'cy_GB.ISO8859-15',
  520.     'cz': 'cs_CZ.ISO8859-2',
  521.     'cz_cz': 'cs_CZ.ISO8859-2',
  522.     'czech': 'cs_CZ.ISO8859-2',
  523.     'da': 'da_DK.ISO8859-1',
  524.     'da_dk': 'da_DK.ISO8859-1',
  525.     'da_dk.88591': 'da_DK.ISO8859-1',
  526.     'da_dk.885915': 'da_DK.ISO8859-15',
  527.     'da_dk.iso88591': 'da_DK.ISO8859-1',
  528.     'da_dk.iso885915': 'da_DK.ISO8859-15',
  529.     'da_dk@euro': 'da_DK.ISO8859-15',
  530.     'danish': 'da_DK.ISO8859-1',
  531.     'danish.iso88591': 'da_DK.ISO8859-1',
  532.     'dansk': 'da_DK.ISO8859-1',
  533.     'de': 'de_DE.ISO8859-1',
  534.     'de_at': 'de_AT.ISO8859-1',
  535.     'de_at.iso88591': 'de_AT.ISO8859-1',
  536.     'de_at.iso885915': 'de_AT.ISO8859-15',
  537.     'de_at@euro': 'de_AT.ISO8859-15',
  538.     'de_be': 'de_BE.ISO8859-1',
  539.     'de_be.iso88591': 'de_BE.ISO8859-1',
  540.     'de_be.iso885915': 'de_BE.ISO8859-15',
  541.     'de_be@euro': 'de_BE.ISO8859-15',
  542.     'de_ch': 'de_CH.ISO8859-1',
  543.     'de_ch.iso88591': 'de_CH.ISO8859-1',
  544.     'de_ch.iso885915': 'de_CH.ISO8859-15',
  545.     'de_ch@euro': 'de_CH.ISO8859-15',
  546.     'de_de': 'de_DE.ISO8859-1',
  547.     'de_de.88591': 'de_DE.ISO8859-1',
  548.     'de_de.885915': 'de_DE.ISO8859-15',
  549.     'de_de.885915@euro': 'de_DE.ISO8859-15',
  550.     'de_de.iso88591': 'de_DE.ISO8859-1',
  551.     'de_de.iso885915': 'de_DE.ISO8859-15',
  552.     'de_de@euro': 'de_DE.ISO8859-15',
  553.     'de_lu': 'de_LU.ISO8859-1',
  554.     'de_lu.iso88591': 'de_LU.ISO8859-1',
  555.     'de_lu.iso885915': 'de_LU.ISO8859-15',
  556.     'de_lu@euro': 'de_LU.ISO8859-15',
  557.     'deutsch': 'de_DE.ISO8859-1',
  558.     'dutch': 'nl_NL.ISO8859-1',
  559.     'dutch.iso88591': 'nl_BE.ISO8859-1',
  560.     'ee': 'ee_EE.ISO8859-4',
  561.     'ee_ee': 'ee_EE.ISO8859-4',
  562.     'ee_ee.iso88594': 'ee_EE.ISO8859-4',
  563.     'eesti': 'et_EE.ISO8859-1',
  564.     'el': 'el_GR.ISO8859-7',
  565.     'el_gr': 'el_GR.ISO8859-7',
  566.     'el_gr.iso88597': 'el_GR.ISO8859-7',
  567.     'el_gr@euro': 'el_GR.ISO8859-15',
  568.     'en': 'en_US.ISO8859-1',
  569.     'en.iso88591': 'en_US.ISO8859-1',
  570.     'en_au': 'en_AU.ISO8859-1',
  571.     'en_au.iso88591': 'en_AU.ISO8859-1',
  572.     'en_be': 'en_BE.ISO8859-1',
  573.     'en_be@euro': 'en_BE.ISO8859-15',
  574.     'en_bw': 'en_BW.ISO8859-1',
  575.     'en_ca': 'en_CA.ISO8859-1',
  576.     'en_ca.iso88591': 'en_CA.ISO8859-1',
  577.     'en_gb': 'en_GB.ISO8859-1',
  578.     'en_gb.88591': 'en_GB.ISO8859-1',
  579.     'en_gb.iso88591': 'en_GB.ISO8859-1',
  580.     'en_gb.iso885915': 'en_GB.ISO8859-15',
  581.     'en_gb@euro': 'en_GB.ISO8859-15',
  582.     'en_hk': 'en_HK.ISO8859-1',
  583.     'en_ie': 'en_IE.ISO8859-1',
  584.     'en_ie.iso88591': 'en_IE.ISO8859-1',
  585.     'en_ie.iso885915': 'en_IE.ISO8859-15',
  586.     'en_ie@euro': 'en_IE.ISO8859-15',
  587.     'en_in': 'en_IN.ISO8859-1',
  588.     'en_nz': 'en_NZ.ISO8859-1',
  589.     'en_nz.iso88591': 'en_NZ.ISO8859-1',
  590.     'en_ph': 'en_PH.ISO8859-1',
  591.     'en_sg': 'en_SG.ISO8859-1',
  592.     'en_uk': 'en_GB.ISO8859-1',
  593.     'en_us': 'en_US.ISO8859-1',
  594.     'en_us.88591': 'en_US.ISO8859-1',
  595.     'en_us.885915': 'en_US.ISO8859-15',
  596.     'en_us.iso88591': 'en_US.ISO8859-1',
  597.     'en_us.iso885915': 'en_US.ISO8859-15',
  598.     'en_us.iso885915@euro': 'en_US.ISO8859-15',
  599.     'en_us@euro': 'en_US.ISO8859-15',
  600.     'en_us@euro@euro': 'en_US.ISO8859-15',
  601.     'en_za': 'en_ZA.ISO8859-1',
  602.     'en_za.88591': 'en_ZA.ISO8859-1',
  603.     'en_za.iso88591': 'en_ZA.ISO8859-1',
  604.     'en_za.iso885915': 'en_ZA.ISO8859-15',
  605.     'en_za@euro': 'en_ZA.ISO8859-15',
  606.     'en_zw': 'en_ZW.ISO8859-1',
  607.     'eng_gb': 'en_GB.ISO8859-1',
  608.     'eng_gb.8859': 'en_GB.ISO8859-1',
  609.     'english': 'en_EN.ISO8859-1',
  610.     'english.iso88591': 'en_EN.ISO8859-1',
  611.     'english_uk': 'en_GB.ISO8859-1',
  612.     'english_uk.8859': 'en_GB.ISO8859-1',
  613.     'english_united-states': 'en_US.ISO8859-1',
  614.     'english_united-states.437': 'C',
  615.     'english_us': 'en_US.ISO8859-1',
  616.     'english_us.8859': 'en_US.ISO8859-1',
  617.     'english_us.ascii': 'en_US.ISO8859-1',
  618.     'eo': 'eo_XX.ISO8859-3',
  619.     'eo_eo': 'eo_EO.ISO8859-3',
  620.     'eo_eo.iso88593': 'eo_EO.ISO8859-3',
  621.     'eo_xx': 'eo_XX.ISO8859-3',
  622.     'eo_xx.iso88593': 'eo_XX.ISO8859-3',
  623.     'es': 'es_ES.ISO8859-1',
  624.     'es_ar': 'es_AR.ISO8859-1',
  625.     'es_ar.iso88591': 'es_AR.ISO8859-1',
  626.     'es_bo': 'es_BO.ISO8859-1',
  627.     'es_bo.iso88591': 'es_BO.ISO8859-1',
  628.     'es_cl': 'es_CL.ISO8859-1',
  629.     'es_cl.iso88591': 'es_CL.ISO8859-1',
  630.     'es_co': 'es_CO.ISO8859-1',
  631.     'es_co.iso88591': 'es_CO.ISO8859-1',
  632.     'es_cr': 'es_CR.ISO8859-1',
  633.     'es_cr.iso88591': 'es_CR.ISO8859-1',
  634.     'es_do': 'es_DO.ISO8859-1',
  635.     'es_do.iso88591': 'es_DO.ISO8859-1',
  636.     'es_ec': 'es_EC.ISO8859-1',
  637.     'es_ec.iso88591': 'es_EC.ISO8859-1',
  638.     'es_es': 'es_ES.ISO8859-1',
  639.     'es_es.88591': 'es_ES.ISO8859-1',
  640.     'es_es.iso88591': 'es_ES.ISO8859-1',
  641.     'es_es.iso885915': 'es_ES.ISO8859-15',
  642.     'es_es@euro': 'es_ES.ISO8859-15',
  643.     'es_gt': 'es_GT.ISO8859-1',
  644.     'es_gt.iso88591': 'es_GT.ISO8859-1',
  645.     'es_hn': 'es_HN.ISO8859-1',
  646.     'es_hn.iso88591': 'es_HN.ISO8859-1',
  647.     'es_mx': 'es_MX.ISO8859-1',
  648.     'es_mx.iso88591': 'es_MX.ISO8859-1',
  649.     'es_ni': 'es_NI.ISO8859-1',
  650.     'es_ni.iso88591': 'es_NI.ISO8859-1',
  651.     'es_pa': 'es_PA.ISO8859-1',
  652.     'es_pa.iso88591': 'es_PA.ISO8859-1',
  653.     'es_pa.iso885915': 'es_PA.ISO8859-15',
  654.     'es_pa@euro': 'es_PA.ISO8859-15',
  655.     'es_pe': 'es_PE.ISO8859-1',
  656.     'es_pe.iso88591': 'es_PE.ISO8859-1',
  657.     'es_pe.iso885915': 'es_PE.ISO8859-15',
  658.     'es_pe@euro': 'es_PE.ISO8859-15',
  659.     'es_pr': 'es_PR.ISO8859-1',
  660.     'es_pr.iso88591': 'es_PR.ISO8859-1',
  661.     'es_py': 'es_PY.ISO8859-1',
  662.     'es_py.iso88591': 'es_PY.ISO8859-1',
  663.     'es_py.iso885915': 'es_PY.ISO8859-15',
  664.     'es_py@euro': 'es_PY.ISO8859-15',
  665.     'es_sv': 'es_SV.ISO8859-1',
  666.     'es_sv.iso88591': 'es_SV.ISO8859-1',
  667.     'es_sv.iso885915': 'es_SV.ISO8859-15',
  668.     'es_sv@euro': 'es_SV.ISO8859-15',
  669.     'es_us': 'es_US.ISO8859-1',
  670.     'es_uy': 'es_UY.ISO8859-1',
  671.     'es_uy.iso88591': 'es_UY.ISO8859-1',
  672.     'es_uy.iso885915': 'es_UY.ISO8859-15',
  673.     'es_uy@euro': 'es_UY.ISO8859-15',
  674.     'es_ve': 'es_VE.ISO8859-1',
  675.     'es_ve.iso88591': 'es_VE.ISO8859-1',
  676.     'es_ve.iso885915': 'es_VE.ISO8859-15',
  677.     'es_ve@euro': 'es_VE.ISO8859-15',
  678.     'estonian': 'et_EE.ISO8859-1',
  679.     'et': 'et_EE.ISO8859-15',
  680.     'et_ee': 'et_EE.ISO8859-15',
  681.     'et_ee.iso88591': 'et_EE.ISO8859-1',
  682.     'et_ee.iso885913': 'et_EE.ISO8859-13',
  683.     'et_ee.iso885915': 'et_EE.ISO8859-15',
  684.     'et_ee.iso88594': 'et_EE.ISO8859-4',
  685.     'et_ee@euro': 'et_EE.ISO8859-15',
  686.     'eu': 'eu_ES.ISO8859-1',
  687.     'eu_es': 'eu_ES.ISO8859-1',
  688.     'eu_es.iso88591': 'eu_ES.ISO8859-1',
  689.     'eu_es.iso885915': 'eu_ES.ISO8859-15',
  690.     'eu_es@euro': 'eu_ES.ISO8859-15',
  691.     'fa': 'fa_IR.UTF-8',
  692.     'fa_ir': 'fa_IR.UTF-8',
  693.     'fa_ir.isiri3342': 'fa_IR.ISIRI-3342',
  694.     'fi': 'fi_FI.ISO8859-15',
  695.     'fi_fi': 'fi_FI.ISO8859-15',
  696.     'fi_fi.88591': 'fi_FI.ISO8859-1',
  697.     'fi_fi.iso88591': 'fi_FI.ISO8859-1',
  698.     'fi_fi.iso885915': 'fi_FI.ISO8859-15',
  699.     'fi_fi.utf8@euro': 'fi_FI.UTF-8',
  700.     'fi_fi@euro': 'fi_FI.ISO8859-15',
  701.     'finnish': 'fi_FI.ISO8859-1',
  702.     'finnish.iso88591': 'fi_FI.ISO8859-1',
  703.     'fo': 'fo_FO.ISO8859-1',
  704.     'fo_fo': 'fo_FO.ISO8859-1',
  705.     'fo_fo.iso88591': 'fo_FO.ISO8859-1',
  706.     'fo_fo.iso885915': 'fo_FO.ISO8859-15',
  707.     'fo_fo@euro': 'fo_FO.ISO8859-15',
  708.     'fr': 'fr_FR.ISO8859-1',
  709.     'fr_be': 'fr_BE.ISO8859-1',
  710.     'fr_be.88591': 'fr_BE.ISO8859-1',
  711.     'fr_be.iso88591': 'fr_BE.ISO8859-1',
  712.     'fr_be.iso885915': 'fr_BE.ISO8859-15',
  713.     'fr_be@euro': 'fr_BE.ISO8859-15',
  714.     'fr_ca': 'fr_CA.ISO8859-1',
  715.     'fr_ca.88591': 'fr_CA.ISO8859-1',
  716.     'fr_ca.iso88591': 'fr_CA.ISO8859-1',
  717.     'fr_ca.iso885915': 'fr_CA.ISO8859-15',
  718.     'fr_ca@euro': 'fr_CA.ISO8859-15',
  719.     'fr_ch': 'fr_CH.ISO8859-1',
  720.     'fr_ch.88591': 'fr_CH.ISO8859-1',
  721.     'fr_ch.iso88591': 'fr_CH.ISO8859-1',
  722.     'fr_ch.iso885915': 'fr_CH.ISO8859-15',
  723.     'fr_ch@euro': 'fr_CH.ISO8859-15',
  724.     'fr_fr': 'fr_FR.ISO8859-1',
  725.     'fr_fr.88591': 'fr_FR.ISO8859-1',
  726.     'fr_fr.iso88591': 'fr_FR.ISO8859-1',
  727.     'fr_fr.iso885915': 'fr_FR.ISO8859-15',
  728.     'fr_fr@euro': 'fr_FR.ISO8859-15',
  729.     'fr_lu': 'fr_LU.ISO8859-1',
  730.     'fr_lu.88591': 'fr_LU.ISO8859-1',
  731.     'fr_lu.iso88591': 'fr_LU.ISO8859-1',
  732.     'fr_lu.iso885915': 'fr_LU.ISO8859-15',
  733.     'fr_lu@euro': 'fr_LU.ISO8859-15',
  734.     'fran\xe7ais': 'fr_FR.ISO8859-1',
  735.     'fre_fr': 'fr_FR.ISO8859-1',
  736.     'fre_fr.8859': 'fr_FR.ISO8859-1',
  737.     'french': 'fr_FR.ISO8859-1',
  738.     'french.iso88591': 'fr_CH.ISO8859-1',
  739.     'french_france': 'fr_FR.ISO8859-1',
  740.     'french_france.8859': 'fr_FR.ISO8859-1',
  741.     'ga': 'ga_IE.ISO8859-1',
  742.     'ga_ie': 'ga_IE.ISO8859-1',
  743.     'ga_ie.iso88591': 'ga_IE.ISO8859-1',
  744.     'ga_ie.iso885914': 'ga_IE.ISO8859-14',
  745.     'ga_ie.iso885915': 'ga_IE.ISO8859-15',
  746.     'ga_ie@euro': 'ga_IE.ISO8859-15',
  747.     'galego': 'gl_ES.ISO8859-1',
  748.     'galician': 'gl_ES.ISO8859-1',
  749.     'gd': 'gd_GB.ISO8859-1',
  750.     'gd_gb': 'gd_GB.ISO8859-1',
  751.     'gd_gb.iso88591': 'gd_GB.ISO8859-1',
  752.     'gd_gb.iso885914': 'gd_GB.ISO8859-14',
  753.     'gd_gb.iso885915': 'gd_GB.ISO8859-15',
  754.     'gd_gb@euro': 'gd_GB.ISO8859-15',
  755.     'ger_de': 'de_DE.ISO8859-1',
  756.     'ger_de.8859': 'de_DE.ISO8859-1',
  757.     'german': 'de_DE.ISO8859-1',
  758.     'german.iso88591': 'de_CH.ISO8859-1',
  759.     'german_germany': 'de_DE.ISO8859-1',
  760.     'german_germany.8859': 'de_DE.ISO8859-1',
  761.     'gl': 'gl_ES.ISO8859-1',
  762.     'gl_es': 'gl_ES.ISO8859-1',
  763.     'gl_es.iso88591': 'gl_ES.ISO8859-1',
  764.     'gl_es.iso885915': 'gl_ES.ISO8859-15',
  765.     'gl_es@euro': 'gl_ES.ISO8859-15',
  766.     'greek': 'el_GR.ISO8859-7',
  767.     'greek.iso88597': 'el_GR.ISO8859-7',
  768.     'gv': 'gv_GB.ISO8859-1',
  769.     'gv_gb': 'gv_GB.ISO8859-1',
  770.     'gv_gb.iso88591': 'gv_GB.ISO8859-1',
  771.     'gv_gb.iso885914': 'gv_GB.ISO8859-14',
  772.     'gv_gb.iso885915': 'gv_GB.ISO8859-15',
  773.     'gv_gb@euro': 'gv_GB.ISO8859-15',
  774.     'he': 'he_IL.ISO8859-8',
  775.     'he_il': 'he_IL.ISO8859-8',
  776.     'he_il.cp1255': 'he_IL.CP1255',
  777.     'he_il.iso88598': 'he_IL.ISO8859-8',
  778.     'he_il.microsoftcp1255': 'he_IL.CP1255',
  779.     'hebrew': 'iw_IL.ISO8859-8',
  780.     'hebrew.iso88598': 'iw_IL.ISO8859-8',
  781.     'hi': 'hi_IN.ISCII-DEV',
  782.     'hi_in': 'hi_IN.ISCII-DEV',
  783.     'hi_in.isciidev': 'hi_IN.ISCII-DEV',
  784.     'hr': 'hr_HR.ISO8859-2',
  785.     'hr_hr': 'hr_HR.ISO8859-2',
  786.     'hr_hr.iso88592': 'hr_HR.ISO8859-2',
  787.     'hrvatski': 'hr_HR.ISO8859-2',
  788.     'hu': 'hu_HU.ISO8859-2',
  789.     'hu_hu': 'hu_HU.ISO8859-2',
  790.     'hu_hu.iso88592': 'hu_HU.ISO8859-2',
  791.     'hungarian': 'hu_HU.ISO8859-2',
  792.     'icelandic': 'is_IS.ISO8859-1',
  793.     'icelandic.iso88591': 'is_IS.ISO8859-1',
  794.     'id': 'id_ID.ISO8859-1',
  795.     'id_id': 'id_ID.ISO8859-1',
  796.     'in': 'id_ID.ISO8859-1',
  797.     'in_id': 'id_ID.ISO8859-1',
  798.     'is': 'is_IS.ISO8859-1',
  799.     'is_is': 'is_IS.ISO8859-1',
  800.     'is_is.iso88591': 'is_IS.ISO8859-1',
  801.     'is_is.iso885915': 'is_IS.ISO8859-15',
  802.     'is_is@euro': 'is_IS.ISO8859-15',
  803.     'iso-8859-1': 'en_US.ISO8859-1',
  804.     'iso-8859-15': 'en_US.ISO8859-15',
  805.     'iso8859-1': 'en_US.ISO8859-1',
  806.     'iso8859-15': 'en_US.ISO8859-15',
  807.     'iso_8859_1': 'en_US.ISO8859-1',
  808.     'iso_8859_15': 'en_US.ISO8859-15',
  809.     'it': 'it_IT.ISO8859-1',
  810.     'it_ch': 'it_CH.ISO8859-1',
  811.     'it_ch.iso88591': 'it_CH.ISO8859-1',
  812.     'it_ch.iso885915': 'it_CH.ISO8859-15',
  813.     'it_ch@euro': 'it_CH.ISO8859-15',
  814.     'it_it': 'it_IT.ISO8859-1',
  815.     'it_it.88591': 'it_IT.ISO8859-1',
  816.     'it_it.iso88591': 'it_IT.ISO8859-1',
  817.     'it_it.iso885915': 'it_IT.ISO8859-15',
  818.     'it_it@euro': 'it_IT.ISO8859-15',
  819.     'italian': 'it_IT.ISO8859-1',
  820.     'italian.iso88591': 'it_IT.ISO8859-1',
  821.     'iu': 'iu_CA.NUNACOM-8',
  822.     'iu_ca': 'iu_CA.NUNACOM-8',
  823.     'iu_ca.nunacom8': 'iu_CA.NUNACOM-8',
  824.     'iw': 'he_IL.ISO8859-8',
  825.     'iw_il': 'he_IL.ISO8859-8',
  826.     'iw_il.iso88598': 'he_IL.ISO8859-8',
  827.     'ja': 'ja_JP.eucJP',
  828.     'ja.jis': 'ja_JP.JIS7',
  829.     'ja.sjis': 'ja_JP.SJIS',
  830.     'ja_jp': 'ja_JP.eucJP',
  831.     'ja_jp.ajec': 'ja_JP.eucJP',
  832.     'ja_jp.euc': 'ja_JP.eucJP',
  833.     'ja_jp.eucjp': 'ja_JP.eucJP',
  834.     'ja_jp.iso-2022-jp': 'ja_JP.JIS7',
  835.     'ja_jp.iso2022jp': 'ja_JP.JIS7',
  836.     'ja_jp.jis': 'ja_JP.JIS7',
  837.     'ja_jp.jis7': 'ja_JP.JIS7',
  838.     'ja_jp.mscode': 'ja_JP.SJIS',
  839.     'ja_jp.sjis': 'ja_JP.SJIS',
  840.     'ja_jp.ujis': 'ja_JP.eucJP',
  841.     'japan': 'ja_JP.eucJP',
  842.     'japanese': 'ja_JP.eucJP',
  843.     'japanese-euc': 'ja_JP.eucJP',
  844.     'japanese.euc': 'ja_JP.eucJP',
  845.     'japanese.sjis': 'ja_JP.SJIS',
  846.     'jp_jp': 'ja_JP.eucJP',
  847.     'ka': 'ka_GE.GEORGIAN-ACADEMY',
  848.     'ka_ge': 'ka_GE.GEORGIAN-ACADEMY',
  849.     'ka_ge.georgianacademy': 'ka_GE.GEORGIAN-ACADEMY',
  850.     'ka_ge.georgianps': 'ka_GE.GEORGIAN-PS',
  851.     'ka_ge.georgianrs': 'ka_GE.GEORGIAN-ACADEMY',
  852.     'kl': 'kl_GL.ISO8859-1',
  853.     'kl_gl': 'kl_GL.ISO8859-1',
  854.     'kl_gl.iso88591': 'kl_GL.ISO8859-1',
  855.     'kl_gl.iso885915': 'kl_GL.ISO8859-15',
  856.     'kl_gl@euro': 'kl_GL.ISO8859-15',
  857.     'ko': 'ko_KR.eucKR',
  858.     'ko_kr': 'ko_KR.eucKR',
  859.     'ko_kr.euc': 'ko_KR.eucKR',
  860.     'ko_kr.euckr': 'ko_KR.eucKR',
  861.     'korean': 'ko_KR.eucKR',
  862.     'korean.euc': 'ko_KR.eucKR',
  863.     'kw': 'kw_GB.ISO8859-1',
  864.     'kw_gb': 'kw_GB.ISO8859-1',
  865.     'kw_gb.iso88591': 'kw_GB.ISO8859-1',
  866.     'kw_gb.iso885914': 'kw_GB.ISO8859-14',
  867.     'kw_gb.iso885915': 'kw_GB.ISO8859-15',
  868.     'kw_gb@euro': 'kw_GB.ISO8859-15',
  869.     'lithuanian': 'lt_LT.ISO8859-13',
  870.     'lo': 'lo_LA.MULELAO-1',
  871.     'lo_la': 'lo_LA.MULELAO-1',
  872.     'lo_la.cp1133': 'lo_LA.IBM-CP1133',
  873.     'lo_la.ibmcp1133': 'lo_LA.IBM-CP1133',
  874.     'lo_la.mulelao1': 'lo_LA.MULELAO-1',
  875.     'lt': 'lt_LT.ISO8859-13',
  876.     'lt_lt': 'lt_LT.ISO8859-13',
  877.     'lt_lt.iso885913': 'lt_LT.ISO8859-13',
  878.     'lt_lt.iso88594': 'lt_LT.ISO8859-4',
  879.     'lv': 'lv_LV.ISO8859-13',
  880.     'lv_lv': 'lv_LV.ISO8859-13',
  881.     'lv_lv.iso885913': 'lv_LV.ISO8859-13',
  882.     'lv_lv.iso88594': 'lv_LV.ISO8859-4',
  883.     'mi': 'mi_NZ.ISO8859-1',
  884.     'mi_nz': 'mi_NZ.ISO8859-1',
  885.     'mi_nz.iso88591': 'mi_NZ.ISO8859-1',
  886.     'mk': 'mk_MK.ISO8859-5',
  887.     'mk_mk': 'mk_MK.ISO8859-5',
  888.     'mk_mk.cp1251': 'mk_MK.CP1251',
  889.     'mk_mk.iso88595': 'mk_MK.ISO8859-5',
  890.     'mk_mk.microsoftcp1251': 'mk_MK.CP1251',
  891.     'ms': 'ms_MY.ISO8859-1',
  892.     'ms_my': 'ms_MY.ISO8859-1',
  893.     'ms_my.iso88591': 'ms_MY.ISO8859-1',
  894.     'mt': 'mt_MT.ISO8859-3',
  895.     'mt_mt': 'mt_MT.ISO8859-3',
  896.     'mt_mt.iso88593': 'mt_MT.ISO8859-3',
  897.     'nb': 'nb_NO.ISO8859-1',
  898.     'nb_no': 'nb_NO.ISO8859-1',
  899.     'nb_no.88591': 'nb_NO.ISO8859-1',
  900.     'nb_no.iso88591': 'nb_NO.ISO8859-1',
  901.     'nb_no.iso885915': 'nb_NO.ISO8859-15',
  902.     'nb_no@euro': 'nb_NO.ISO8859-15',
  903.     'nl': 'nl_NL.ISO8859-1',
  904.     'nl_be': 'nl_BE.ISO8859-1',
  905.     'nl_be.88591': 'nl_BE.ISO8859-1',
  906.     'nl_be.iso88591': 'nl_BE.ISO8859-1',
  907.     'nl_be.iso885915': 'nl_BE.ISO8859-15',
  908.     'nl_be@euro': 'nl_BE.ISO8859-15',
  909.     'nl_nl': 'nl_NL.ISO8859-1',
  910.     'nl_nl.88591': 'nl_NL.ISO8859-1',
  911.     'nl_nl.iso88591': 'nl_NL.ISO8859-1',
  912.     'nl_nl.iso885915': 'nl_NL.ISO8859-15',
  913.     'nl_nl@euro': 'nl_NL.ISO8859-15',
  914.     'nn': 'nn_NO.ISO8859-1',
  915.     'nn_no': 'nn_NO.ISO8859-1',
  916.     'nn_no.88591': 'nn_NO.ISO8859-1',
  917.     'nn_no.iso88591': 'nn_NO.ISO8859-1',
  918.     'nn_no.iso885915': 'nn_NO.ISO8859-15',
  919.     'nn_no@euro': 'nn_NO.ISO8859-15',
  920.     'no': 'no_NO.ISO8859-1',
  921.     'no@nynorsk': 'ny_NO.ISO8859-1',
  922.     'no_no': 'no_NO.ISO8859-1',
  923.     'no_no.88591': 'no_NO.ISO8859-1',
  924.     'no_no.iso88591': 'no_NO.ISO8859-1',
  925.     'no_no.iso885915': 'no_NO.ISO8859-15',
  926.     'no_no@euro': 'no_NO.ISO8859-15',
  927.     'norwegian': 'no_NO.ISO8859-1',
  928.     'norwegian.iso88591': 'no_NO.ISO8859-1',
  929.     'ny': 'ny_NO.ISO8859-1',
  930.     'ny_no': 'ny_NO.ISO8859-1',
  931.     'ny_no.88591': 'ny_NO.ISO8859-1',
  932.     'ny_no.iso88591': 'ny_NO.ISO8859-1',
  933.     'ny_no.iso885915': 'ny_NO.ISO8859-15',
  934.     'ny_no@euro': 'ny_NO.ISO8859-15',
  935.     'nynorsk': 'nn_NO.ISO8859-1',
  936.     'oc': 'oc_FR.ISO8859-1',
  937.     'oc_fr': 'oc_FR.ISO8859-1',
  938.     'oc_fr.iso88591': 'oc_FR.ISO8859-1',
  939.     'oc_fr.iso885915': 'oc_FR.ISO8859-15',
  940.     'oc_fr@euro': 'oc_FR.ISO8859-15',
  941.     'pd': 'pd_US.ISO8859-1',
  942.     'pd_de': 'pd_DE.ISO8859-1',
  943.     'pd_de.iso88591': 'pd_DE.ISO8859-1',
  944.     'pd_de.iso885915': 'pd_DE.ISO8859-15',
  945.     'pd_de@euro': 'pd_DE.ISO8859-15',
  946.     'pd_us': 'pd_US.ISO8859-1',
  947.     'pd_us.iso88591': 'pd_US.ISO8859-1',
  948.     'pd_us.iso885915': 'pd_US.ISO8859-15',
  949.     'pd_us@euro': 'pd_US.ISO8859-15',
  950.     'ph': 'ph_PH.ISO8859-1',
  951.     'ph_ph': 'ph_PH.ISO8859-1',
  952.     'ph_ph.iso88591': 'ph_PH.ISO8859-1',
  953.     'pl': 'pl_PL.ISO8859-2',
  954.     'pl_pl': 'pl_PL.ISO8859-2',
  955.     'pl_pl.iso88592': 'pl_PL.ISO8859-2',
  956.     'polish': 'pl_PL.ISO8859-2',
  957.     'portuguese': 'pt_PT.ISO8859-1',
  958.     'portuguese.iso88591': 'pt_PT.ISO8859-1',
  959.     'portuguese_brazil': 'pt_BR.ISO8859-1',
  960.     'portuguese_brazil.8859': 'pt_BR.ISO8859-1',
  961.     'posix': 'C',
  962.     'posix-utf2': 'C',
  963.     'pp': 'pp_AN.ISO8859-1',
  964.     'pp_an': 'pp_AN.ISO8859-1',
  965.     'pp_an.iso88591': 'pp_AN.ISO8859-1',
  966.     'pt': 'pt_PT.ISO8859-1',
  967.     'pt_br': 'pt_BR.ISO8859-1',
  968.     'pt_br.88591': 'pt_BR.ISO8859-1',
  969.     'pt_br.iso88591': 'pt_BR.ISO8859-1',
  970.     'pt_br.iso885915': 'pt_BR.ISO8859-15',
  971.     'pt_br@euro': 'pt_BR.ISO8859-15',
  972.     'pt_pt': 'pt_PT.ISO8859-1',
  973.     'pt_pt.88591': 'pt_PT.ISO8859-1',
  974.     'pt_pt.iso88591': 'pt_PT.ISO8859-1',
  975.     'pt_pt.iso885915': 'pt_PT.ISO8859-15',
  976.     'pt_pt.utf8@euro': 'pt_PT.UTF-8',
  977.     'pt_pt@euro': 'pt_PT.ISO8859-15',
  978.     'ro': 'ro_RO.ISO8859-2',
  979.     'ro_ro': 'ro_RO.ISO8859-2',
  980.     'ro_ro.iso88592': 'ro_RO.ISO8859-2',
  981.     'romanian': 'ro_RO.ISO8859-2',
  982.     'ru': 'ru_RU.ISO8859-5',
  983.     'ru_ru': 'ru_RU.ISO8859-5',
  984.     'ru_ru.cp1251': 'ru_RU.CP1251',
  985.     'ru_ru.iso88595': 'ru_RU.ISO8859-5',
  986.     'ru_ru.koi8r': 'ru_RU.KOI8-R',
  987.     'ru_ru.microsoftcp1251': 'ru_RU.CP1251',
  988.     'ru_ua': 'ru_UA.KOI8-U',
  989.     'ru_ua.cp1251': 'ru_UA.CP1251',
  990.     'ru_ua.koi8u': 'ru_UA.KOI8-U',
  991.     'ru_ua.microsoftcp1251': 'ru_UA.CP1251',
  992.     'rumanian': 'ro_RO.ISO8859-2',
  993.     'russian': 'ru_RU.ISO8859-5',
  994.     'se_no': 'se_NO.UTF-8',
  995.     'serbocroatian': 'sh_YU.ISO8859-2',
  996.     'sh': 'sh_YU.ISO8859-2',
  997.     'sh_hr': 'sh_HR.ISO8859-2',
  998.     'sh_hr.iso88592': 'sh_HR.ISO8859-2',
  999.     'sh_sp': 'sh_YU.ISO8859-2',
  1000.     'sh_yu': 'sh_YU.ISO8859-2',
  1001.     'sk': 'sk_SK.ISO8859-2',
  1002.     'sk_sk': 'sk_SK.ISO8859-2',
  1003.     'sk_sk.iso88592': 'sk_SK.ISO8859-2',
  1004.     'sl': 'sl_SI.ISO8859-2',
  1005.     'sl_cs': 'sl_CS.ISO8859-2',
  1006.     'sl_si': 'sl_SI.ISO8859-2',
  1007.     'sl_si.iso88592': 'sl_SI.ISO8859-2',
  1008.     'slovak': 'sk_SK.ISO8859-2',
  1009.     'slovene': 'sl_SI.ISO8859-2',
  1010.     'slovenian': 'sl_SI.ISO8859-2',
  1011.     'sp': 'sp_YU.ISO8859-5',
  1012.     'sp_yu': 'sp_YU.ISO8859-5',
  1013.     'spanish': 'es_ES.ISO8859-1',
  1014.     'spanish.iso88591': 'es_ES.ISO8859-1',
  1015.     'spanish_spain': 'es_ES.ISO8859-1',
  1016.     'spanish_spain.8859': 'es_ES.ISO8859-1',
  1017.     'sq': 'sq_AL.ISO8859-2',
  1018.     'sq_al': 'sq_AL.ISO8859-2',
  1019.     'sq_al.iso88592': 'sq_AL.ISO8859-2',
  1020.     'sr': 'sr_YU.ISO8859-5',
  1021.     'sr@cyrillic': 'sr_YU.ISO8859-5',
  1022.     'sr_sp': 'sr_SP.ISO8859-2',
  1023.     'sr_yu': 'sr_YU.ISO8859-5',
  1024.     'sr_yu.cp1251@cyrillic': 'sr_YU.CP1251',
  1025.     'sr_yu.iso88592': 'sr_YU.ISO8859-2',
  1026.     'sr_yu.iso88595': 'sr_YU.ISO8859-5',
  1027.     'sr_yu.iso88595@cyrillic': 'sr_YU.ISO8859-5',
  1028.     'sr_yu.microsoftcp1251@cyrillic': 'sr_YU.CP1251',
  1029.     'sr_yu.utf8@cyrillic': 'sr_YU.UTF-8',
  1030.     'sr_yu@cyrillic': 'sr_YU.ISO8859-5',
  1031.     'sv': 'sv_SE.ISO8859-1',
  1032.     'sv_fi': 'sv_FI.ISO8859-1',
  1033.     'sv_fi.iso88591': 'sv_FI.ISO8859-1',
  1034.     'sv_fi.iso885915': 'sv_FI.ISO8859-15',
  1035.     'sv_fi@euro': 'sv_FI.ISO8859-15',
  1036.     'sv_se': 'sv_SE.ISO8859-1',
  1037.     'sv_se.88591': 'sv_SE.ISO8859-1',
  1038.     'sv_se.iso88591': 'sv_SE.ISO8859-1',
  1039.     'sv_se.iso885915': 'sv_SE.ISO8859-15',
  1040.     'sv_se@euro': 'sv_SE.ISO8859-15',
  1041.     'swedish': 'sv_SE.ISO8859-1',
  1042.     'swedish.iso88591': 'sv_SE.ISO8859-1',
  1043.     'ta': 'ta_IN.TSCII-0',
  1044.     'ta_in': 'ta_IN.TSCII-0',
  1045.     'ta_in.tscii': 'ta_IN.TSCII-0',
  1046.     'ta_in.tscii0': 'ta_IN.TSCII-0',
  1047.     'tg': 'tg_TJ.KOI8-C',
  1048.     'tg_tj': 'tg_TJ.KOI8-C',
  1049.     'tg_tj.koi8c': 'tg_TJ.KOI8-C',
  1050.     'th': 'th_TH.ISO8859-11',
  1051.     'th_th': 'th_TH.ISO8859-11',
  1052.     'th_th.iso885911': 'th_TH.ISO8859-11',
  1053.     'th_th.tactis': 'th_TH.TIS620',
  1054.     'th_th.tis620': 'th_TH.TIS620',
  1055.     'thai': 'th_TH.ISO8859-11',
  1056.     'tl': 'tl_PH.ISO8859-1',
  1057.     'tl_ph': 'tl_PH.ISO8859-1',
  1058.     'tl_ph.iso88591': 'tl_PH.ISO8859-1',
  1059.     'tr': 'tr_TR.ISO8859-9',
  1060.     'tr_tr': 'tr_TR.ISO8859-9',
  1061.     'tr_tr.iso88599': 'tr_TR.ISO8859-9',
  1062.     'tt': 'tt_RU.TATAR-CYR',
  1063.     'tt_ru': 'tt_RU.TATAR-CYR',
  1064.     'tt_ru.koi8c': 'tt_RU.KOI8-C',
  1065.     'tt_ru.tatarcyr': 'tt_RU.TATAR-CYR',
  1066.     'turkish': 'tr_TR.ISO8859-9',
  1067.     'turkish.iso88599': 'tr_TR.ISO8859-9',
  1068.     'uk': 'uk_UA.KOI8-U',
  1069.     'uk_ua': 'uk_UA.KOI8-U',
  1070.     'uk_ua.cp1251': 'uk_UA.CP1251',
  1071.     'uk_ua.iso88595': 'uk_UA.ISO8859-5',
  1072.     'uk_ua.koi8u': 'uk_UA.KOI8-U',
  1073.     'uk_ua.microsoftcp1251': 'uk_UA.CP1251',
  1074.     'univ': 'en_US.utf',
  1075.     'universal': 'en_US.utf',
  1076.     'universal.utf8@ucs4': 'en_US.UTF-8',
  1077.     'ur': 'ur_PK.CP1256',
  1078.     'ur_pk': 'ur_PK.CP1256',
  1079.     'ur_pk.cp1256': 'ur_PK.CP1256',
  1080.     'ur_pk.microsoftcp1256': 'ur_PK.CP1256',
  1081.     'uz': 'uz_UZ.UTF-8',
  1082.     'uz_uz': 'uz_UZ.UTF-8',
  1083.     'vi': 'vi_VN.TCVN',
  1084.     'vi_vn': 'vi_VN.TCVN',
  1085.     'vi_vn.tcvn': 'vi_VN.TCVN',
  1086.     'vi_vn.tcvn5712': 'vi_VN.TCVN',
  1087.     'vi_vn.viscii': 'vi_VN.VISCII',
  1088.     'vi_vn.viscii111': 'vi_VN.VISCII',
  1089.     'wa': 'wa_BE.ISO8859-1',
  1090.     'wa_be': 'wa_BE.ISO8859-1',
  1091.     'wa_be.iso88591': 'wa_BE.ISO8859-1',
  1092.     'wa_be.iso885915': 'wa_BE.ISO8859-15',
  1093.     'wa_be@euro': 'wa_BE.ISO8859-15',
  1094.     'yi': 'yi_US.CP1255',
  1095.     'yi_us': 'yi_US.CP1255',
  1096.     'yi_us.cp1255': 'yi_US.CP1255',
  1097.     'yi_us.microsoftcp1255': 'yi_US.CP1255',
  1098.     'zh': 'zh_CN.eucCN',
  1099.     'zh_cn': 'zh_CN.gb2312',
  1100.     'zh_cn.big5': 'zh_TW.big5',
  1101.     'zh_cn.euc': 'zh_CN.eucCN',
  1102.     'zh_cn.gb18030': 'zh_CN.gb18030',
  1103.     'zh_cn.gb2312': 'zh_CN.gb2312',
  1104.     'zh_cn.gbk': 'zh_CN.gbk',
  1105.     'zh_hk': 'zh_HK.big5hkscs',
  1106.     'zh_hk.big5': 'zh_HK.big5',
  1107.     'zh_hk.big5hkscs': 'zh_HK.big5hkscs',
  1108.     'zh_tw': 'zh_TW.big5',
  1109.     'zh_tw.big5': 'zh_TW.big5',
  1110.     'zh_tw.euc': 'zh_TW.eucTW' }
  1111. windows_locale = {
  1112.     1078: 'af_ZA',
  1113.     1052: 'sq_AL',
  1114.     1025: 'ar_SA',
  1115.     2049: 'ar_IQ',
  1116.     3073: 'ar_EG',
  1117.     4097: 'ar_LY',
  1118.     5121: 'ar_DZ',
  1119.     6145: 'ar_MA',
  1120.     7169: 'ar_TN',
  1121.     8193: 'ar_OM',
  1122.     9217: 'ar_YE',
  1123.     10241: 'ar_SY',
  1124.     11265: 'ar_JO',
  1125.     12289: 'ar_LB',
  1126.     13313: 'ar_KW',
  1127.     14337: 'ar_AE',
  1128.     15361: 'ar_BH',
  1129.     16385: 'ar_QA',
  1130.     1067: 'hy_AM',
  1131.     1068: 'az_AZ',
  1132.     2092: 'az_AZ',
  1133.     1069: 'eu_ES',
  1134.     1059: 'be_BY',
  1135.     1093: 'bn_IN',
  1136.     8218: 'bs_BA',
  1137.     5146: 'bs_BA',
  1138.     1150: 'br_FR',
  1139.     1026: 'bg_BG',
  1140.     1027: 'ca_ES',
  1141.     4: 'zh_CHS',
  1142.     1028: 'zh_TW',
  1143.     2052: 'zh_CN',
  1144.     3076: 'zh_HK',
  1145.     4100: 'zh_SG',
  1146.     5124: 'zh_MO',
  1147.     31748: 'zh_CHT',
  1148.     1050: 'hr_HR',
  1149.     4122: 'hr_BA',
  1150.     1029: 'cs_CZ',
  1151.     1030: 'da_DK',
  1152.     1164: 'gbz_AF',
  1153.     1125: 'div_MV',
  1154.     1043: 'nl_NL',
  1155.     2067: 'nl_BE',
  1156.     1033: 'en_US',
  1157.     2057: 'en_GB',
  1158.     3081: 'en_AU',
  1159.     4105: 'en_CA',
  1160.     5129: 'en_NZ',
  1161.     6153: 'en_IE',
  1162.     7177: 'en_ZA',
  1163.     8201: 'en_JA',
  1164.     9225: 'en_CB',
  1165.     10249: 'en_BZ',
  1166.     11273: 'en_TT',
  1167.     12297: 'en_ZW',
  1168.     13321: 'en_PH',
  1169.     1061: 'et_EE',
  1170.     1080: 'fo_FO',
  1171.     1124: 'fil_PH',
  1172.     1035: 'fi_FI',
  1173.     1036: 'fr_FR',
  1174.     2060: 'fr_BE',
  1175.     3084: 'fr_CA',
  1176.     4108: 'fr_CH',
  1177.     5132: 'fr_LU',
  1178.     6156: 'fr_MC',
  1179.     1122: 'fy_NL',
  1180.     1110: 'gl_ES',
  1181.     1079: 'ka_GE',
  1182.     1031: 'de_DE',
  1183.     2055: 'de_CH',
  1184.     3079: 'de_AT',
  1185.     4103: 'de_LU',
  1186.     5127: 'de_LI',
  1187.     1032: 'el_GR',
  1188.     1095: 'gu_IN',
  1189.     1037: 'he_IL',
  1190.     1081: 'hi_IN',
  1191.     1038: 'hu_HU',
  1192.     1039: 'is_IS',
  1193.     1057: 'id_ID',
  1194.     1117: 'iu_CA',
  1195.     2141: 'iu_CA',
  1196.     2108: 'ga_IE',
  1197.     1076: 'xh_ZA',
  1198.     1077: 'zu_ZA',
  1199.     1040: 'it_IT',
  1200.     2064: 'it_CH',
  1201.     1041: 'ja_JP',
  1202.     1099: 'kn_IN',
  1203.     1087: 'kk_KZ',
  1204.     1111: 'kok_IN',
  1205.     1042: 'ko_KR',
  1206.     1088: 'ky_KG',
  1207.     1062: 'lv_LV',
  1208.     1063: 'lt_LT',
  1209.     1134: 'lb_LU',
  1210.     1071: 'mk_MK',
  1211.     1086: 'ms_MY',
  1212.     2110: 'ms_BN',
  1213.     1100: 'ml_IN',
  1214.     1082: 'mt_MT',
  1215.     1153: 'mi_NZ',
  1216.     1146: 'arn_CL',
  1217.     1102: 'mr_IN',
  1218.     1148: 'moh_CA',
  1219.     1104: 'mn_MN',
  1220.     1121: 'ne_NP',
  1221.     1044: 'nb_NO',
  1222.     2068: 'nn_NO',
  1223.     1154: 'oc_FR',
  1224.     1096: 'or_IN',
  1225.     1123: 'ps_AF',
  1226.     1065: 'fa_IR',
  1227.     1045: 'pl_PL',
  1228.     1046: 'pt_BR',
  1229.     2070: 'pt_PT',
  1230.     1094: 'pa_IN',
  1231.     1131: 'quz_BO',
  1232.     2155: 'quz_EC',
  1233.     3179: 'quz_PE',
  1234.     1048: 'ro_RO',
  1235.     1047: 'rm_CH',
  1236.     1049: 'ru_RU',
  1237.     9275: 'smn_FI',
  1238.     4155: 'smj_NO',
  1239.     5179: 'smj_SE',
  1240.     1083: 'se_NO',
  1241.     2107: 'se_SE',
  1242.     3131: 'se_FI',
  1243.     8251: 'sms_FI',
  1244.     6203: 'sma_NO',
  1245.     7227: 'sma_SE',
  1246.     1103: 'sa_IN',
  1247.     3098: 'sr_SP',
  1248.     7194: 'sr_BA',
  1249.     2074: 'sr_SP',
  1250.     6170: 'sr_BA',
  1251.     1132: 'ns_ZA',
  1252.     1074: 'tn_ZA',
  1253.     1051: 'sk_SK',
  1254.     1060: 'sl_SI',
  1255.     1034: 'es_ES',
  1256.     2058: 'es_MX',
  1257.     3082: 'es_ES',
  1258.     4106: 'es_GT',
  1259.     5130: 'es_CR',
  1260.     6154: 'es_PA',
  1261.     7178: 'es_DO',
  1262.     8202: 'es_VE',
  1263.     9226: 'es_CO',
  1264.     10250: 'es_PE',
  1265.     11274: 'es_AR',
  1266.     12298: 'es_EC',
  1267.     13322: 'es_CL',
  1268.     14346: 'es_UR',
  1269.     15370: 'es_PY',
  1270.     16394: 'es_BO',
  1271.     17418: 'es_SV',
  1272.     18442: 'es_HN',
  1273.     19466: 'es_NI',
  1274.     20490: 'es_PR',
  1275.     1089: 'sw_KE',
  1276.     1053: 'sv_SE',
  1277.     2077: 'sv_FI',
  1278.     1114: 'syr_SY',
  1279.     1097: 'ta_IN',
  1280.     1092: 'tt_RU',
  1281.     1098: 'te_IN',
  1282.     1054: 'th_TH',
  1283.     1055: 'tr_TR',
  1284.     1058: 'uk_UA',
  1285.     1056: 'ur_PK',
  1286.     2080: 'ur_IN',
  1287.     1091: 'uz_UZ',
  1288.     2115: 'uz_UZ',
  1289.     1066: 'vi_VN',
  1290.     1106: 'cy_GB' }
  1291.  
  1292. def _print_locale():
  1293.     categories = { }
  1294.     
  1295.     def _init_categories(categories = categories):
  1296.         for k, v in globals().items():
  1297.             if k[:3] == 'LC_':
  1298.                 categories[k] = v
  1299.                 continue
  1300.         
  1301.  
  1302.     _init_categories()
  1303.     del categories['LC_ALL']
  1304.     print 'Locale defaults as determined by getdefaultlocale():'
  1305.     print '-' * 72
  1306.     (lang, enc) = getdefaultlocale()
  1307.     print 'Language: ',
  1308.     if not lang:
  1309.         pass
  1310.     print '(undefined)'
  1311.     print 'Encoding: ',
  1312.     if not enc:
  1313.         pass
  1314.     print '(undefined)'
  1315.     print 
  1316.     print 'Locale settings on startup:'
  1317.     print '-' * 72
  1318.     for name, category in categories.items():
  1319.         print name, '...'
  1320.         (lang, enc) = getlocale(category)
  1321.         print '   Language: ',
  1322.         if not lang:
  1323.             pass
  1324.         print '(undefined)'
  1325.         print '   Encoding: ',
  1326.         if not enc:
  1327.             pass
  1328.         print '(undefined)'
  1329.         print 
  1330.     
  1331.     print 
  1332.     print 'Locale settings after calling resetlocale():'
  1333.     print '-' * 72
  1334.     resetlocale()
  1335.     for name, category in categories.items():
  1336.         print name, '...'
  1337.         (lang, enc) = getlocale(category)
  1338.         print '   Language: ',
  1339.         if not lang:
  1340.             pass
  1341.         print '(undefined)'
  1342.         print '   Encoding: ',
  1343.         if not enc:
  1344.             pass
  1345.         print '(undefined)'
  1346.         print 
  1347.     
  1348.     
  1349.     try:
  1350.         setlocale(LC_ALL, '')
  1351.     except:
  1352.         print 'NOTE:'
  1353.         print 'setlocale(LC_ALL, "") does not support the default locale'
  1354.         print 'given in the OS environment variables.'
  1355.  
  1356.     print 
  1357.     print 'Locale settings after calling setlocale(LC_ALL, ""):'
  1358.     print '-' * 72
  1359.     for name, category in categories.items():
  1360.         print name, '...'
  1361.         (lang, enc) = getlocale(category)
  1362.         print '   Language: ',
  1363.         if not lang:
  1364.             pass
  1365.         print '(undefined)'
  1366.         print '   Encoding: ',
  1367.         if not enc:
  1368.             pass
  1369.         print '(undefined)'
  1370.         print 
  1371.     
  1372.  
  1373.  
  1374. try:
  1375.     LC_MESSAGES
  1376. except NameError:
  1377.     pass
  1378.  
  1379. __all__.append('LC_MESSAGES')
  1380. if __name__ == '__main__':
  1381.     print 'Locale aliasing:'
  1382.     print 
  1383.     _print_locale()
  1384.     print 
  1385.     print 'Number formatting:'
  1386.     print 
  1387.     _test()
  1388.  
  1389.